/**
 * Created by way on 16/6/10.
 */

import { get as kget, post } from '../lib/kajax';

/* global txToken */
/* global wx */

/**
 * 格式化字符串，类似 node util中带的 format
 * @type {Function}
 */
export function format(f, ...args) {
  let i = 0;
  const len = args.length;
  const str = String(f).replace(/%[sdj%]/g, x => {
    if (x === '%%') return '%';
    if (i >= len) return x;
    switch (x) {
      case '%s':
        return String(args[i++]);
      case '%d':
        return Number(args[i++]);
      case '%j':
        return JSON.stringify(args[i++]);
      default:
        return x;
    }
  });

  return str;
}

/**
 * 修改微信 title
 */
export function setTitle(val) {
  setTimeout(() => {
    // 利用iframe的onload事件刷新页面
    document.title = val;

    const fr = document.createElement('iframe');
    // fr.style.visibility = 'hidden';
    fr.style.display = 'none';
    fr.src = 'img/favicon.ico';
    fr.onload = () => {
      setTimeout(() => {
        document.body.removeChild(fr);
      }, 0);
    };
    document.body.appendChild(fr);
  }, 0);
}

export function urlParam(name) {
  let rc = null;

  const val = `&${location.search.substr(1)}&`;
  const rg = new RegExp(`&${name}=([^&]*)&`);
  const rgs = rg.exec(val);
  if (rgs) {
    rc = rgs[1];
    rc = decodeURIComponent(rc);
  }

  return rc;
}

/**
 * 去除字符串头部空格或指定字符
 */
export function trimStart(s, c) {
  if (!c)
    return String(s).replace(/(^\s*)/g, '');
  else {
    const rx = new RegExp(format('^%s*', c));
    return String(s).replace(rx, '');
  }
}

/**
 * 去除字符串尾部空格或指定字符
 */
export function trimEnd(s, c) {
  if (!s)
    return '';

  if (!c)
    return String(s).replace(/(\s*$)/g, '');
  else {
    const rx = new RegExp(format('%s*$', c));
    return String(s).replace(rx, '');
  }
}

/**
 * js时间转换为指定字符串格式，由于字符串转换为Date时，会按时区加减时间
 * 实际js系统内的Date都是标准时间，标准时间转换为字符串时，需考虑还原时区，
 * 因此，字符串转换为 Date，再转换为字符串时，如果不考虑时区，时间是不对的！
 * 该函数自动将js Date标准时间，按时区还原为正确的字符串！
 * Date.toString() = Sat Aug 10 2013 11:41:24 GMT+0800 (中国标准时间)

 * 所有字符串日期、时间转换 js Date，都会自动减 8小时！
 * Date.getXXX 转换为数值时，自动加了 8 小时！
 * Date.getUTCXXX时，按原值转换格式，没有加 8 小时，请注意！
 * getTime() 是与 标准时间 1970 比较的！
 * toString 与 toUTCString 也是不一样的！
 * @param x
 * @param y "yyyy-MM-dd hh:mm:ss"
 * @returns {XML}
 * 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
 * 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 * 例子：
 * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
 * (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
 */
export function dateStr(x, y) {
  let rc = '';

  if (!x)
    return '';

  if (!y)
    y = 'yyyy-MM-dd hh:mm:ss';

  if (typeof (x) === 'string')
    x = new Date(x);

  // Date.getXXX 函数会自动还原时区！！！
  const z = {
    M: x.getMonth() + 1, d: x.getDate(), h: x.getHours(), m: x.getMinutes(),
    s: x.getSeconds(), S: x.getMilliseconds()
  };

  y = y.replace(/(M+|d+|h+|m+|s+|S+)/g, function (v) {
    return ((v.length > 1 ? '0' : '') + eval('z.' + v.slice(-1))).slice(-2);
  }
  );

  rc = y.replace(/(y+)/g, function (v) {
    return x.getFullYear().toString().slice(-v.length);
  } // yy几个就返回 几个数字，使用 slice -4 倒数4个，再往后
  );

  return trimEnd(rc, ' 00:00:00');
}

export function wxConfig(api) {
  let apis = api;
  if (!apis)
    apis = [
      'checkJsApi',
      'onMenuShareTimeline',
      'onMenuShareAppMessage',
      'onMenuShareQQ',
      'onMenuShareWeibo',
      'onMenuShareQZone',
      'hideMenuItems',
      'showMenuItems',
      'hideAllNonBaseMenuItem',
      'showAllNonBaseMenuItem',
      'translateVoice',
      'startRecord',
      'stopRecord',
      'onVoiceRecordEnd',
      'playVoice',
      'onVoicePlayEnd',
      'pauseVoice',
      'stopVoice',
      'uploadVoice',
      'downloadVoice',
      'chooseImage',
      'previewImage',
      'uploadImage',
      'downloadImage',
      'getNetworkType',
      'openLocation',
      'getLocation',
      'hideOptionMenu',
      'showOptionMenu',
      'closeWindow',
      'scanQRCode',
      'chooseWXPay',
      'openProductSpecificView',
      'addCard',
      'chooseCard',
      'openCard'];

  getWxSign(rs => {
    // alert(`sign:${rs.sign} stamp:${rs.stamp}`);
    wx.config({
      debug: false,
      appId: 'wx02da95761cb1c55e',
      timestamp: rs.stamp,
      nonceStr: 'Wm3WZYTPz0wzccnW',
      signature: rs.sign,
      jsApiList: apis
    });
  });
}
/*
 //  var tm1 = new Date(Date.parse('2013-07-20 18:00:00'.replace(/-/g,   "/")));
 var tm2 = Date.parse('2013-07-21 17:00');
 var tm1 = new Date();
 console.log( tm1.getTime() - tm2);
 return;

 //var tm1 = new Date(Date.parse('2013-07-20 18:00:00'));
 //var tm1 = new Date( '2013-07-20' );
 var tm1 = new Date( '2013/07/20' ); // 不带时区
 var tm2 = new Date( '2013-07-20' ); // 带了时区，时刻会多8 小时！！！
 tz = new Date().getTimezoneOffset() * 60000;
 tm1 = new Date(tm1.getTime() - tz);
 //var tm2 = new Date( '2013/07/20 10:00' );
 console.log( 't1:%d t2:%d td:%d tz:%d', tm1.getTime(), tm2.getTime(), tm1.getTime() - tm2.getTime(), tz);


 return;
 //
 //  var d1 = new Date('2013-07-20 18:00:00');  //会早 8 个时区，
 //  var d2 = new Date('2013/07/20 18:00:00');
 //  console.log('d1:%d d2:%d dif:%d', d1.getTime(), d2.getTime(), d1.getTime() - d2.getTime());
 //  return;

 */
/*查找字符串*/
export function strfind(str, val) {
  if (!str, !val) return;
  if (str instanceof Array) str.join(',');
  return new RegExp(',' + val + ',').test(',' + str + ',');
}

// urlParams 获取?分割的参数
export function urlParams(str) {
  const url = location.search.substr(1).split('?');
  // const url = ('?stp=3?orderNo=201548945465?sphone=15826419347?sid=4&code=askdhakasf21as45asdas1d4ad1sd45af1').substr(1).split('?');
  let val = '';
  for (let i = 0; i < url.length; i++) {
    val = url[i].split('=');
    // console.log(val);
    if (val[0] == str) {
      if (val[1].indexOf('&') != -1) {
        return val[1].split('&')[0];
      } else {
        return val[1]
      }
    }
  }
}

/*
 * yyyy-MM-dd hh:mm:ss
 * */
function splitDate(date, format) {
  if (date) {
    let rc = null;
    let rs = formatDate('yyyy-MM-dd hh:mm', date);
    rc = rs.split(" ");
    return formatDate('yyyy-MM-dd hh:mm')
  }
}